﻿
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- saved from url=(0014)about:internet -->
<html xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:mssdk="winsdk" xmlns:script="urn:script" xmlns:build="urn:build" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Description" content="Registers"/>
<meta name="MSHAttr" content="PreferredSiteName:MSDN"/>
<meta name="MSHAttr" content="PreferredLib:/library/windows/hardware"/>
<title>Registers</title>

<meta name="MS-HAID" content="Engine_DG_eaa71da7-23ac-4464-9142-23c89a31e14e.xml"/>


<link rel="STYLESHEET" type="text/css" HREF="../common/backsdk4.css"/>





<style>
html,div { margin: 0; padding: 0;}

body {
	padding: 0px;
	margin: 0px;
	overflow: auto;
	height: 100%;
}

#winchm_template_button{
	float: right;
	width: 93px;
	top: 7px;
	position: relative;
	text-align: right;
	right: 5px;
	height: auto;
}

#winchm_template_top{
	padding: 0px;
	margin: 0px;
	border-bottom: 1px solid #9B9B9B;
	background-color: #B1CEFE;
}

#winchm_template_navigation{
	margin: 0px;
	padding-top: 7px;
	padding-left: 7px;
	padding-bottom: 3px;
	padding-right: 0px;
	font-size: 8.5pt;
	font-family: Arial, Helvetica, sans-serif;
	font-weight: normal;
	color: #585858;
}

#winchm_template_title{
	margin: 0px;
	padding-top: 4px;
	padding-left: 7px;
	padding-bottom: 7px;
	padding-right: 0px;
	font-size: 18px; 
	font-family: Verdana, Geneva, sans-serif;
	color: #363636;
}

#winchm_template_content{
	margin-top: 20px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	width: auto  !important;
	width: 100%;
}

#winchm_template_footer{
	border-width: 1px;
	border-color: #B1CEFE;
	border-top-style: solid;
	margin-top: 15px;
	margin-left: 15px;
	margin-bottom: 20px;
	margin-right: 15px;
	padding-top: 7px;
	padding-left: 0px;
	padding-bottom: 0px;
	padding-right: 0px;
	font-family: arial, helvetica, sans-serif;
	font-size: 8.5pt;
	color: #696969;
	width: auto;
	text-align: left;
}


#winchm_template_container{
	margin: 0px;
	padding: 0px;
	position: static;
	padding-bottom: 3px;
	overflow: auto;
	background-color: #FFFFFF;
}


@media print
{
#winchm_template_container{
	position: static;	
	margin: 0px;
	padding: 5px;
	
	width: auto;
	height: auto;
	overflow: auto;
}
#winchm_template_button{
visibility:hidden;
}
}

#winchm_template_navigation A:link	{text-decoration: none; color:#004080}
#winchm_template_navigation A:visited  {text-decoration: none; color: #004080}
#winchm_template_navigation A:active {text-decoration: none; color: #004080 }
#winchm_template_navigation A:hover {text-decoration: none;color: #0080FF}

A:link	{text-decoration: underline; color:#0033CC}
A:visited  {text-decoration: underline; color: #0033CC}
A:active {text-decoration: underline; color: #0033CC }
A:hover {text-decoration: underline;color: #FF0000;}
</style>
<script type="text/javascript">
function isMobile(){
Agent = window.navigator.userAgent;
if (Agent.indexOf("iPhone")>=1 || Agent.indexOf("iPad")>=1 || Agent.indexOf("iPod")>=1 || Agent.indexOf("Android")>=1){
return true;
}else{
return false;	
}

}
function d_onresize(){
if (window.navigator.userAgent.indexOf("MSIE")>=1){
document.getElementById('winchm_template_container').style.pixelWidth = document.body.offsetWidth - 3;
document.getElementById('winchm_template_container').style.pixelHeight = document.body.offsetHeight - document.getElementById('winchm_template_top').offsetHeight - 4;
}
document.getElementById('winchm_template_container').style.top = document.getElementById('winchm_template_top').offsetHeight + 'px';
}

function d_onbeforeprint(){
document.getElementById('winchm_template_container').style.width = 'auto';
document.getElementById('winchm_template_container').style.height = 'auto';
}

function d_onafterprint(){
d_onresize();
}

if(!isMobile()){

window.onload = d_onresize;
window.onresize = d_onresize;
window.onbeforeprint = d_onbeforeprint;
window.onafterprint = d_onafterprint;

document.write("<style>\n");
document.write("body {overflow: hidden;}\n");
document.write("#winchm_template_container {position: absolute;overflow: auto;top : 0px;right: 0px;bottom: 0px;left: 0px;}\n");
document.write("</style>\n");
}

</script>
</head>
<body><script language="JavaScript" type="text/JavaScript">
function syn(){
if(parent.nav.tree){
 if(parent.nav.tree.loaded){
  parent.nav.tree.selectNode(218);
 }else{
  setTimeout("syn()",500);
}
  }else{
  setTimeout("syn()",500);
  }}
if(parent!=self){
  setTimeout("syn()",100);
}else{
  parent.location.href = "../../index.htm?page=debugger/registers.htm";
}
originalOnload = window.onload;
if(originalOnload==null){
window.onload = function(){parent.contentLoaded = true;};
}else{
window.onload = function(){originalOnload();parent.contentLoaded = true;};
}
</script> 


<div id="winchm_template_top">
	<div id="winchm_template_button"><A href="virtual_and_physical_memory.htm" title="Previous topic"><img id="winchm_template_prev" alt="Previous topic" src="../template2/btn_prev_n.gif" border="0"></a><A href="other_data_spaces.htm" title="Next topic"><img id="winchm_template_next" alt="Next topic" src="../template2/btn_next_n.gif" border="0"></a></div>
	<div id="winchm_template_navigation">Help &gt; 
<A href="introduction6.htm">Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)</A> &gt; <A href="debugging_resources.htm">Debugging Resources</A> &gt; <A href="debugger_engine_and_extension_apis.htm">Debugger Engine and Extension APIs</A> &gt; <A href="using_the_debugger_engine_api.htm">Using the Debugger Engine API</A> &gt; <A href="debugger_engine_api_overview.htm">Debugger Engine API Overview</A> &gt; <A href="memory_access.htm">Memory Access</A> &gt; </div>
	<div id="winchm_template_title">Registers</div>
</div>
<div id="winchm_template_container">
	<div id="winchm_template_content"><div id="mainSection"><p>The <a href="#Bookmark192">debugger engine</a> can be used to examine and alter the target's registers.</p>
<p>The registers available on the target depend on its processor architecture.  For a description of the registers for the x86 and Itanium processors, see <a href="#Bookmark182">Processor Architecture</a>.  For a complete description of the registers available for a processor, see that processor's documentation.</p>
<h3><a id="the_register_set"></a><a id="THE_REGISTER_SET"></a>The Register Set</h3>
<p>The <a href="#Bookmark601"><b>GetNumberRegisters</b></a> method can be used to find the number of registers on the target.</p>
<p>Each register is referred to by its index.  The index of the first register is zero, and the index of the last register is the number of registers minus one.  To find the index of a register whose name is known, use <a href="#Bookmark599"><b>GetIndexByName</b></a>.</p>
<p>The method <a href="#Bookmark597"><b>GetDescription</b></a> returns information about a register.  This includes the register's name, the type of values it can hold, and whether it is a subregister.</p>
<p>A <i>subregister</i> is a register that is contained within another register.  When the subregister changes, the register that contains it also changes.  For example, on an x86 processor, the <b>ax</b> subregister is the same as the low 16 bits of the 32-bit <b>eax</b> register.</p>
<p>There are three special registers whose values may be found by using the following methods.  The interpretation of the values of these registers is platform dependent.</p>
<ul>
<li>
<p>The location of the current instruction may be found with <a href="#Bookmark600"><b>GetInstructionOffset</b></a> and <a href="#Bookmark612"><b>GetInstructionOffset2</b></a>.</p>
</li>
<li>
<p>The location of the current processor stack slot may be found with <a href="#Bookmark602"><b>GetStackOffset</b></a> and <a href="#Bookmark619"><b>GetStackOffset2</b></a>.</p>
</li>
<li>
<p>The location of the stack frame for the current function may be found with  <a href="#Bookmark598"><b>GetFrameOffset</b></a> and <a href="#Bookmark610"><b>GetFrameOffset2</b></a>.</p>
</li>
</ul>
<h3><a id="manipulating_registers"></a><a id="MANIPULATING_REGISTERS"></a>Manipulating Registers</h3>
<p>The value of a register can be read by using the method <a href="#Bookmark603"><b>GetValue</b></a>.  Multiple registers can be read by using <a href="#Bookmark604"><b>GetValues</b></a> and <a href="#Bookmark620"><b>GetValues2</b></a>.</p>
<p>A value can be written to a register by using the method <a href="#Bookmark606"><b>SetValue</b></a>.  Multiple registers can be written by using <a href="#Bookmark607"><b>SetValues</b></a> and <a href="#Bookmark623"><b>SetValues2</b></a>.</p>
<p>When writing a value to a register, if the value supplied has a different type to the type of the register then the value is converted into the register's type.  This conversion is the same as that performed by the method <a href="#Bookmark381"><b>CoerceValue</b></a>.  This conversion may result in data loss if the register's type is not capable of holding the value supplied.</p>
<h3><a id="pseudo_registers"></a><a id="PSEUDO_REGISTERS"></a>
      Pseudo-Registers</h3>
<p><i>Pseudo-registers</i> are variables maintained by the debugger engine that hold certain values, for example, <b>$teb</b> is the name of the pseudo-register whose value is the address of the current thread's Thread Environment Block (TEB).  For more information, and a list of the pseudo-registers, see <a href="#Bookmark1925">Pseudo-Register Syntax</a>.</p>
<p>Each pseudo-register has an index.  The index is a number between zero and the number of pseudo-registers - (returned by <a href="#Bookmark613"><b>GetNumberPseudoRegisters</b></a>) minus one.  To find the index of a pseudo-register by its name, use <a href="#Bookmark616"><b>GetPseudoIndexByName</b></a>.  The values of pseudo-registers can be read using <a href="#Bookmark618"><b>GetPseudoValues</b></a>, and values can be written to pseudo-registers using <a href="#Bookmark622"><b>SetPseudoValues</b></a>.  For a description of a pseudo-register, including its type, use <a href="#Bookmark614"><b>GetPseudoDescription</b></a>.</p>
<div class="alert"><b>Note</b>    Not all of the pseudo-registers are available in all debugging sessions or at all times in a particular session.</div>
<div> </div>
<h3><a id="displaying_registers"></a><a id="DISPLAYING_REGISTERS"></a>Displaying Registers</h3>
<p>The methods <a href="#Bookmark605"><b>OutputRegisters</b></a> and <a href="#Bookmark621"><b>OutputRegisters2</b></a> format the target's registers and sends them to the clients as output.</p>
<h3><a id="events"></a><a id="EVENTS"></a>Events</h3>
<p>Whenever the values of the target's registers change, the engine will call the <a href="#Bookmark788"><b>IDebugEventCallbacks::ChangeDebuggeeState</b></a> callback method with the parameter <i>Flags</i> set to DEBUG_CDS_REGISTERS.</p></div></div>	
	<div id="winchm_template_footer">Copyright &copy; 2019. All rights 
reserved. (To change the copyright info, just edit it in template.)</div>
</div>

</body>
</html>
